Subject: MD

Envivo Bio, Inc.; Confidential

logo

1.1 Overview of microbial community composition

Figure 1 is an interactive figure showing the microbial community composition in the collected sample. Here, each color and shade corresponds to a different genus. For reference, domestic dogs (Canis familiaris) and gray wolves (Canis lupus) are different species that belong to the same genus (Canis).

You can interact with this figure by:

Figure 1: Microbial community composition of collected CapScan sample. Taxonomic composition is reported at the genus rank. Genera present at <1% relative abundance across all samples are reported as “Other genera”. Note: Blue = Firmicutes; Yellow = Actinomycetes; Green = Bacteroidetes; Red = Proteobacteria; Purple = all other phyla. Shades of the same color (except purple) correspond to different genera from the same phylum.



1.2 High-resolution snapshot of community composition

Figure 2 is an interactive figure showing the microbial community composition at higher taxononomic resolution. Here, each row corresponds to a unique microbe.

You can interact with this figure by:



Figure 2: Heat map showing relative abundance of unique microbes (N = 103 total identified). Each row corresponds to a unique microbe. Note the relative abundance colorscale is in log units.



1.3 Notable microbes detected



1.4 References

Quévrain, E., Maubert, M.A., Michon, C., Chain, F., Marquant, R., Tailhades, J., et al. (2017) Identification of an anti-inflammatory protein from Faecalibacterium prausnitzii, a commensal bacterium deficient in Crohn’s disease. Gut 65: 415–425.

Ze, X., Duncan, S.H., Louis, P., and Flint, H.J. (2012) Ruminococcus bromii is a keystone species for the degradation of resistant starch in the human colon. ISME J 6: 1535–1543.

LS0tCnRpdGxlOiAiPGJyPiBUYXhvbm9taWMgcHJvZmlsaW5nIG9mIGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY29tbXVuaXRpZXMgZnJvbSBhIENhcFNjYW4tc2FtcGxlZCBndXQgbWV0YWdlbm9tZSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCi0tLQoKPHN0eWxlPgpkaXYuaGlnaGxpZ2h0IHsKYmFja2dyb3VuZC1jb2xvcjogI0YyRjJGMjsKcGFkZGluZzogMHB4Owpib3JkZXItcmFkaXVzOiAycHg7Cn0KCjwvc3R5bGU+CgojIyMgPGI+PGk+U3ViamVjdDogTUQ8L2I+PC9pPgoqRW52aXZvIEJpbywgSW5jLjsgQ29uZmlkZW50aWFsKgoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyIGFkZCBsb2dvLCBlY2hvID0gRkFMU0V9CmxvZ29fcGF0aCA8LSAiLi4vbG9nby9lbnZpdm8uc3ZnIgoKaHRtbHRvb2xzOjppbWcoc3JjID0ga25pdHI6OmltYWdlX3VyaShsb2dvX3BhdGgpLCAKICAgICAgICAgICAgICAgYWx0ID0gImxvZ28iLCAKICAgICAgICAgICAgICAgc3R5bGUgPSAicG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyByaWdodDowOyBwYWRkaW5nOjEwcHg7IHdpZHRoOiAxNDVweDsgaGVpZ2h0OiA0MnB4IikKYGBgCgpgYGB7ciBsb2FkIHBhY2thZ2VzLCBpbmNsdWRlID0gRkFMU0V9CiMgTGlzdCByZXF1aXJlZCBwYWNrYWdlcwpjcmFuUGFja2FnZXMgPC0gYygiQmlvY01hbmFnZXIiLCAiZ2dwbG90MiIsICJkcGx5ciIsICJ0aWR5ciIsCiAgICAgICAgICAgICAgICAgICJhcGUiLCAiZ2dwbG90MiIsICJyZXNoYXBlMiIsICJwbG90bHkiLCAiaGVhdG1hcGx5IikKYmlvY1BhY2thZ2VzIDwtIGMoInBoeWxvc2VxIiwgIkJpb3N0cmluZ3MiKQoKIyBJbnN0YWxsIG1pc3NpbmcgQ1JBTiBwYWNrYWdlcwppbnN0YWxsZWRDUkFOIDwtIGNyYW5QYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZENSQU4gPT0gRkFMU0UpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcyhjcmFuUGFja2FnZXNbIWluc3RhbGxlZENSQU5dLAogICAgICAgICAgICAgICAgICAgcmVwb3MgPSAnaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZycpCn0KCiMgSW5zdGFsbCBtaXNzaW5nIEJpb2NvbmR1Y3RvciBwYWNrYWdlcwppbnN0YWxsZWRCaW9jIDwtIGJpb2NQYWNrYWdlcyAlaW4lIHJvd25hbWVzKGluc3RhbGxlZC5wYWNrYWdlcygpKQppZiAoYW55KGluc3RhbGxlZEJpb2MgPT0gRkFMU0UpKSB7CiAgQmlvY01hbmFnZXI6Omluc3RhbGwoYmlvY1BhY2thZ2VzWyFpbnN0YWxsZWRCaW9jXSkKfQoKIyBMb2FkIHBhY2thZ2VzCmxhcHBseShjKGNyYW5QYWNrYWdlcywgYmlvY1BhY2thZ2VzKSwgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQpgYGAKCmBgYHtyIGxvYWQgZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQojIExvYWQgQ29zbW9zSUQgZGF0YSBhbmQgZm9ybWF0dGVkIG1ldGFkYXRhCmNvc21vcyA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9jb3Ntb3NpZF8yMDIyMDkwNi5jc3YiKQptZXRhIDwtIHJlYWQuY3N2KGZpbGUgPSAiLi4vZGF0YS9DUDA0NjE4X21ldGFkYXRhLmNzdiIpCmBgYAoKYGBge3IgZm9ybWF0IGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBQcmVwYXJlIHRheF90YWJsZSBhbmQgb3R1X3RhYmxlIG9iamVjdHMKdGF4IDwtIGNvc21vcyAlPiUKICBzZWxlY3QoUGh5bHVtLCBDbGFzcywgT3JkZXIsIEZhbWlseSwgR2VudXMsIFNwZWNpZXMsIFN0cmFpbikgJT4lCiAgYXMubWF0cml4ICU+JQogIHRheF90YWJsZQoKc3RhcnRfaW5kIDwtIGdyZXAoIlN0cmFpbiIsIGNvbG5hbWVzKGNvc21vcykpKzEKc3RvcF9pbmQgPC0gbmNvbChjb3Ntb3MpLTIKYWJ1bmRhbmNlX3Njb3JlcyA8LSBjb3Ntb3NbLHN0YXJ0X2luZDpzdG9wX2luZF0gJT4lIG90dV90YWJsZSguLCB0YXhhX2FyZV9yb3dzID0gVFJVRSkKCiMgUmVmb3JtYXQgc2FtcGxlIG5hbWVzIGFuZCBtZXRhZGF0YSBzYW1wbGUgbmFtZXMgc28gdGhleSBtYXRjaApjb2xuYW1lcyhhYnVuZGFuY2Vfc2NvcmVzKSA8LSBjb2xuYW1lcyhhYnVuZGFuY2Vfc2NvcmVzKSAlPiUKICBnc3ViKCJYIiwgIiIsIC4pICU+JQogIGdzdWIoIl8uKiIsICIiLCAuKSAlPiUKICBwYXN0ZTAoIkVCXyIsIC4pCgpyb3cubmFtZXMobWV0YSkgPC0gbWV0YSAlPiUKICBwdWxsKFNhbXBsZV9udW1iZXIpICU+JQogIHBhc3RlMCgiRUJfIiwgLikKCnNhbV9kYXRhIDwtIHNhbXBsZV9kYXRhKG1ldGEpCmBgYAoKYGBge3IgYnVpbGQgcGh5bG9zZXEsIGluY2x1ZGUgPSBGQUxTRX0KIyBCdWlsZCBwaHlsb3NlcSBvYmplY3QKcHMgPC0gcGh5bG9zZXEodGF4LCBhYnVuZGFuY2Vfc2NvcmVzLCBzYW1fZGF0YSkKYGBgCgpgYGB7ciB0cmFuc2Zvcm0gZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQojIExvZyB0cmFuc2Zvcm0KcHNMb2cgPC0gcHMgJT4lIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKC4sIGZ1bmN0aW9uKHgpIGxvZyh4ICsgMSwgYmFzZSA9IDEwKSkKCiMgUmVsYXRpdmUgYWJ1bmRhbmNlIHRyYW5zZm9ybQpwc1JBIDwtIHBzICU+JSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyguLCBmdW5jdGlvbih4KSB4L3N1bSh4KSoxMDApCmBgYAoKYGBge3IgcmFuayBwaHlsYSwgaW5jbHVkZSA9IEZBTFNFfQpwaHlfcmFuayA8LSBwc1JBICU+JQogIHRheF9nbG9tKC4sIHRheHJhbmsgPSAiUGh5bHVtIikgJT4lCiAgcHNtZWx0ICU+JQogIGdyb3VwX2J5KFBoeWx1bSkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihBYnVuZGFuY2UpKQoKcGh5X3JhbmsgJT4lIGFycmFuZ2UoZGVzYyhtZWRpYW4pKQpgYGAKCmBgYHtyIHN1YmplY3Qgc3Vic2V0LCBpbmNsdWRlID0gRkFMU0V9CiMgU2V0IHN1YmplY3QKc3ViamVjdCA8LSAiTUQiCgojIFN1YnNldCB0byBzdWJqZWN0IHNhbXBsZXMgYW5kIGRyb3AgbWlzc2luZyB0YXhhCnBzU3ViIDwtIHN1YnNldF9zYW1wbGVzKHBzLCBTdWJqZWN0ID09IHN1YmplY3QpICU+JQogIHBydW5lX3RheGEodGF4YV9zdW1zKC4pID4gMCwgLikKCiMgQWRkIHBsb3QgbGFiZWwgZm9yIGVhY2ggc2FtcGxlCnNhbXBsZV9kYXRhKHBzU3ViKSRQbG90X2xhYmVsIDwtIHBhc3RlMChzYW1wbGVfbmFtZXMocHNTdWIpLCAiICgiLCBzYW1wbGVfZGF0YShwc1N1YikkU2FtcGxlX3R5cGUsICIpIikKCiMgUmVsYXRpdmUgYWJ1bmRhbmNlIHRyYW5zZm9ybQpwc1N1Yl9yYSA8LSBwc1N1YiAlPiUgdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMoLiwgZnVuY3Rpb24oeCkgeC9zdW0oeCkqMTAwKQpgYGAKCmBgYHtyIHBsb3QgYmFyLCBpbmNsdWRlID0gRkFMU0V9CiMgRGVmaW5lIE5PVCBJTiBvcGVyYXRvcgonJSFpbiUnIDwtIGZ1bmN0aW9uKHgseSkhKCclaW4lJyh4LHkpKQoKIyBBZ2dsb21lcmF0ZSBhdCBHZW51cyBhbmQgbWVsdAp0YXhyYW5rIDwtICJHZW51cyIKbWVsdCA8LSBwc1N1Yl9yYSAlPiUgdGF4X2dsb20oLiwgdGF4cmFuayA9IHRheHJhbmspICU+JSBwc21lbHQKCiMgRGVmaW5lIG1ham9yIHBoeWxhCm1ham9yX3BoeSA8LSBjKCJGaXJtaWN1dGVzIiwgIkFjdGlub2JhY3RlcmlhIiwgIkJhY3Rlcm9pZGV0ZXMiLCAiUHJvdGVvYmFjdGVyaWEiKQoKIyBJZGVudGlmeSBnZW5lcmEgcHJlc2VudCBpbiA8MSUgcmVsYXRpdmUgYWJ1bmRhbmNlIGluIGFsbCBzYW1wbGVzCnJhcmVfZ2VuZXJhIDwtIG1lbHQgJT4lCiAgZ3JvdXBfYnkoU2FtcGxlX251bWJlciwgR2VudXMpICU+JQogIHN1bW1hcml6ZShzdW0gPSBzdW0oQWJ1bmRhbmNlKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KEdlbnVzKSAlPiUKICBzdW1tYXJpemUobWF4ID0gbWF4KHN1bSkpICU+JQogIGZpbHRlcihtYXggPCAxKSAlPiUKICBwdWxsKEdlbnVzKQoKIyBDcmVhdGUgbmV3IGNvbHVtbiBjb250YWluaW5nIG5hbWUgb2YgZ2VudXMgaWYgYWJvdmUgY3V0b2ZmIG9yICJPdGhlciBnZW5lcmEiIGlmIG5vdApkZiA8LSBtZWx0ICU+JQogIG11dGF0ZShQaHlfZ3JvdXAgPSBjYXNlX3doZW4oUGh5bHVtICUhaW4lIG1ham9yX3BoeSB+ICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IFBoeWx1bSksCiAgICAgICAgIFBoeV9ncm91cCA9IGNhc2Vfd2hlbihHZW51cyAlaW4lIHJhcmVfZ2VuZXJhIH4gIk90aGVyIHBoeWx1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gUGh5X2dyb3VwKSwKICAgICAgICAgVGF4X2xhYmVsID0gY2FzZV93aGVuKEdlbnVzICVpbiUgcmFyZV9nZW5lcmEgfiAiQWFPdGhlciBnZW5lcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IEdlbnVzKSkgJT4lCiAgZ3JvdXBfYnkoU3ViamVjdCkgJT4lCiAgYXJyYW5nZShTdWJqZWN0LCBTYW1wbGVfdHlwZSkKCiMgRGVmaW5lIG9yZGVyCnBoeV9vcmRlciA8LSBjKCJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiLAogICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIsCiAgICAgICAgICAgICAgICJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIikgJT4lIHJldgoKZ2VuX29yZGVyIDwtIGRmICU+JQogIHNlbGVjdChQaHlfZ3JvdXAsIFRheF9sYWJlbCkgJT4lCiAgbXV0YXRlKE9yZGVyID0gbWF0Y2goUGh5X2dyb3VwLCBwaHlfb3JkZXIpKSAlPiUKICBhcnJhbmdlKE9yZGVyLCBkZXNjKFRheF9sYWJlbCkpICU+JQogIGRpc3RpbmN0ICU+JQogIHB1bGwoVGF4X2xhYmVsKQoKZ2VuX29yZGVyIDwtIGZhY3Rvcihnc3ViKCJeQWEiLCAiIiwgZ2VuX29yZGVyKSwgbGV2ZWxzID0gZ3N1YigiXkFhIiwgIiIsIGdlbl9vcmRlcikpICMgdGhlIEFhIGlzIHRvIG1ha2Ugc3VyZSAiT3RoZXIiIGlzIHBsb3R0ZWQgYXQgdGhlIHRvcAoKZGYgPC0gZGYgJT4lCiAgbXV0YXRlKFRheF9sYWJlbCA9IGZhY3Rvcihnc3ViKCJeQWEiLCAiIiwgVGF4X2xhYmVsKSwgbGV2ZWxzID0gZ2VuX29yZGVyKSkKCiMgRGVmaW5lIGNvbG9ycwpwaHlfY29sb3IgPC0gZGF0YS5mcmFtZShQaHlsdW0gPSBjKCJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIHBoeWx1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZV9jb2xvciA9IGMoIiNGRkI3MjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzgzMkNGRiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNjRDNjJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMwNzJBQzgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0U5M0I0RiIpKQoKcGh5X2NvbG9yIDwtIHBoeV9jb2xvclttYXRjaChwaHlfb3JkZXIsIHBoeV9jb2xvciRQaHlsdW0pLF0KCiMgRGF0YSBmcmFtZSBhcyBpbnB1dCwgZGF0YSBmcmFtZSB3aXRoIG5ldyBjb2x1bW4gb2YgaGV4IGNvZGVzIGFzIG91dHB1dApjb2xfcGFsZXR0ZSA8LSBkZiAlPiUKICBzZWxlY3QoUGh5X2dyb3VwLCBUYXhfbGFiZWwpICU+JQogIGRpc3RpbmN0ICU+JQogIG11dGF0ZShIZXhfY29kZSA9IE5BKQoKCmZvcihwaHkgaW4gcGh5X2NvbG9yJFBoeWx1bSkgewogIHRlc3QgPC0gY29sX3BhbGV0dGUgJT4lCiAgICBmaWx0ZXIoUGh5X2dyb3VwID09IHBoeSkgJT4lCiAgICBwdWxsKFRheF9sYWJlbCkgJT4lCiAgICBkcm9wbGV2ZWxzICU+JQogICAgbGV2ZWxzCiAgCiAgdGF4LmNvbG9yIDwtIGNvbG9yUmFtcFBhbGV0dGUoYyhwaHlfY29sb3IkQmFzZV9jb2xvclttYXRjaChwaHksIHBoeV9jb2xvciRQaHlsdW0pXSwgIndoaXRlIikpCiAgY29sdGVzdCA8LSB0YXguY29sb3IobGVuZ3RoKHRlc3QpKzIpICU+JQogICAgLlstbGVuZ3RoKC4pXQogIGNvbF9wYWxldHRlJEhleF9jb2RlW21hdGNoKHRlc3QsIGNvbF9wYWxldHRlJFRheF9sYWJlbCldIDwtIGNvbHRlc3QKfQoKY29sX3BhbGV0dGUgPC0gY29sX3BhbGV0dGUgJT4lIGFycmFuZ2UoZmFjdG9yKFRheF9sYWJlbCwgbGV2ZWxzID0gZ2VuX29yZGVyKSkKYGBgCgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4xIE92ZXJ2aWV3IG9mIG1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24KPC9kaXY+CgpGaWd1cmUgMSBpcyBhbiBpbnRlcmFjdGl2ZSBmaWd1cmUgc2hvd2luZyB0aGUgbWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBpbiB0aGUgY29sbGVjdGVkIHNhbXBsZS4gSGVyZSwgZWFjaCBjb2xvciBhbmQgc2hhZGUgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgZ2VudXMuIEZvciByZWZlcmVuY2UsIGRvbWVzdGljIGRvZ3MgKCpDYW5pcyBmYW1pbGlhcmlzKikgYW5kIGdyYXkgd29sdmVzICgqQ2FuaXMgbHVwdXMqKSBhcmUgZGlmZmVyZW50IHNwZWNpZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNhbWUgZ2VudXMgKCpDYW5pcyopLgo8YnI+PGJyPgpZb3UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmaWd1cmUgYnk6CgoqIEhvdmVyaW5nIHRoZSBjdXJzb3Igb3ZlciBhIGNvbG9yIGluIHRoZSBzdGFja2VkIGJhciB0byBzZWUgdGhlIHRheG9ub21pYyBpZGVudGl0eSwgc2FtcGxlIHR5cGUsIGFuZCByZWxhdGl2ZSBhYnVuZGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGF0IGNvbG9yIGFuZCBiYXIKKiBDbGlja2luZyBhbmQgZHJhZ2dpbmcgdGhlIGN1cnNvciBvdmVyIGEgcG9ydGlvbiBvZiB0aGUgZmlndXJlIHRvIHpvb20KKiBTaW5nbGUtY2xpY2tpbmcgYSBnZW51cydzIG5hbWUgaW4gdGhlIGxlZ2VuZCB0byByZW1vdmUgdGhhdCBnZW51cyBmcm9tIHRoZSBmaWd1cmUKKiBEb3VibGUtY2xpY2tpbmcgKDx1PnZlcnkgcXVpY2tseTwvdT4pIGEgZ2VudXMncyBuYW1lIGluIHRoZSBsZWdlbmQgdG8gb25seSBzaG93IHRoYXQgZ2VudXMKYGBge3IsIG91dC53aWR0aCA9ICIxMDAlIiwgZWNobyA9IEZBTFNFfQojIFBsb3QKcEJhciA8LSBwbG90X2x5KGRmLCB4ID0gflBsb3RfbGFiZWwsIHkgPSB+QWJ1bmRhbmNlLCB0eXBlID0gImJhciIsCiAgICAgICAgICAgICBjb2xvciA9IH5UYXhfbGFiZWwsIGNvbG9ycyA9IGNvbF9wYWxldHRlJEhleF9jb2RlLAogICAgICAgICAgICAgdGV4dHBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgiPGI+R2VudXM6PC9iPiIsIFRheF9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj48YnI+IiwgIjxiPlNhbXBsZSB0eXBlOjwvYj4iLCBTYW1wbGVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+UmVsYXRpdmUgYWJ1bmRhbmNlOjwvYj4iLCBwYXN0ZTAocm91bmQoQWJ1bmRhbmNlLCBkaWdpdHMgPSAxKSwgIiUiKSksCiAgICAgICAgICAgICBob3ZlcmluZm8gPSAidGV4dCIpICU+JQogIGxheW91dCh4YXhpcyA9IGxpc3QodGl0bGUgPSAiPGI+U2FtcGxlPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrcyA9ICJvdXRzaWRlIiksCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2UgKCUpPC9iPiIsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrcyA9ICJvdXRzaWRlIiksCiAgICAgICAgIGJhcm1vZGUgPSAic3RhY2siLAogICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAiQXJpYWwiKSkKCnBCYXIkeCRsYXlvdXQkeWF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwQmFyCmBgYAoqKkZpZ3VyZSAxOioqIE1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24gb2YgY29sbGVjdGVkIENhcFNjYW4gc2FtcGxlLiBUYXhvbm9taWMgY29tcG9zaXRpb24gaXMgcmVwb3J0ZWQgYXQgdGhlIGdlbnVzIHJhbmsuIEdlbmVyYSBwcmVzZW50IGF0IDwxJSByZWxhdGl2ZSBhYnVuZGFuY2UgYWNyb3NzIGFsbCBzYW1wbGVzIGFyZSByZXBvcnRlZCBhcyAiT3RoZXIgZ2VuZXJhIi4gPHU+Tm90ZTo8L3U+IEJsdWUgPSAqRmlybWljdXRlcyo7IFllbGxvdyA9ICpBY3Rpbm9teWNldGVzKjsgR3JlZW4gPSAqQmFjdGVyb2lkZXRlcyo7IFJlZCA9ICpQcm90ZW9iYWN0ZXJpYSo7IFB1cnBsZSA9IGFsbCBvdGhlciBwaHlsYS4gU2hhZGVzIG9mIHRoZSBzYW1lIGNvbG9yIChleGNlcHQgcHVycGxlKSBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCBnZW5lcmEgZnJvbSB0aGUgc2FtZSBwaHlsdW0uCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIE9yZGluYXRpb24tYmFzZWQKI3BIZWF0X29yZCA8LSBwbG90X2hlYXRtYXAocHNTdWJfcmEsIG1ldGhvZCA9ICJOTURTIiwgZGlzdGFuY2UgPSAiYnJheSIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGEubGFiZWwgPSAiU3RyYWluIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmxhYmVsID0gMzAwKQojCiMgUmV0cmlldmUgcm93IGFuZCB0YXhvbiBvcmRlcnMKI3Jvd19vcmRlciA8LSBwSGVhdF9vcmQkcGxvdF9lbnYkdGF4YS5vcmRlciAlPiUgcmV2CiN0YXhfb3JkZXIgPC0gdGF4X3RhYmxlKHBzU3ViX3JhKVttYXRjaChyb3dfb3JkZXIsIHJvd25hbWVzKHRheF90YWJsZShwc1N1Yl9yYSkpKSxdICU+JQojICBhcy5kYXRhLmZyYW1lICU+JQojICBtdXRhdGUodGF4b24gPSByb3duYW1lcyguKSwKIyAgICAgICAgIEFidW5kYW5jZSA9IDEsCiMgICAgICAgICBTYW1wbGUgPSBzdWJqZWN0KQojIE9yZGVyIGJ5IHJlbGF0aXZlIGFidW5kYW5jZSB3aXRoaW4gc2FtcGxlcwpyb3dfb3JkZXIgPC0gb3R1X3RhYmxlKHBzU3ViX3JhKSAlPiUKICBhcy5kYXRhLmZyYW1lICU+JQogIGFycmFuZ2UoRUJfMjYxKSAlPiUKICByb3duYW1lcwpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CiMgUHJlcGFyZSBkYXRhCnggPC0gcHNTdWJfcmEgJT4lIG90dV90YWJsZSAlPiUgYXMuZGF0YS5mcmFtZQpjb2xuYW1lcyh4KSA8LSBsYXBwbHkoY29sbmFtZXMoeCksIGdyZXAsIHNhbXBsZV9kYXRhKHBzU3ViX3JhKSRQbG90X2xhYmVsLCB2YWx1ZSA9IFRSVUUpICU+JSB1bmxpc3QKCiMgQWRkIHRheG9ub215CnggPC0gY2JpbmQoeCwgdGF4X3RhYmxlKHBzU3ViX3JhKSkKCiMgUmVvcmRlciByb3dzIGFuZCBjb2x1bW5zIHRvIG1hdGNoIG9yZGluYXRpb24KeCA8LSB4W21hdGNoKHJvd19vcmRlciwgcm93bmFtZXMoeCkpLF0KCiMgU2V0IGhvdmVydGV4dApuc2FtcCA8LSBuc2FtcGxlcyhwc1N1Yl9yYSkKaG92ZXJfc3RyYWluIDwtIHhbLCAxOm5zYW1wXQpob3Zlcl9zdHJhaW5bXSA8LSBwYXN0ZTAoIjxiPk1pY3JvYmU6PC9iPiAiLCB4JFN0cmFpbiwgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2U6PC9iPiAiKQpob3Zlcl9zdHJhaW4gPC0gYXMubWF0cml4KGhvdmVyX3N0cmFpbikKCmhvdmVyX2FidW5kIDwtIHhbLCAxOm5zYW1wXSAlPiUgcm91bmQoLiwgZGlnaXRzID0gMikgJT4lIGFzLmRhdGEuZnJhbWUKaG92ZXJfYWJ1bmQgPC0gYXBwbHkoaG92ZXJfYWJ1bmQsIDIsIHBhc3RlMCwgIiUiKQpob3Zlcl9hYnVuZCA8LSBhcy5tYXRyaXgoaG92ZXJfYWJ1bmQpCgpob3Zlcl90YXggPC0geFssIDE6bnNhbXBdCmhvdmVyX3RheFtdIDwtIHBhc3RlMCgiXG4gXG48Yj5QaHlsdW06PC9iPiAiLCB4JFBoeWx1bSwgIlxuIiwKICAgICAgICAgICAgICAgICAgICI8Yj5DbGFzczo8L2I+ICIsIHgkQ2xhc3MsICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+T3JkZXI6PC9iPiAiLCB4JE9yZGVyLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkZhbWlseTo8L2I+ICIsIHgkRmFtaWx5LCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkdlbnVzOjwvYj4gIiwgeCRHZW51cywgIlxuIikKaG92ZXJfdGF4IDwtIGFzLm1hdHJpeChob3Zlcl90YXgpCgpob3ZlcnRleHQgPC0gbWF0cml4KHBhc3RlMChob3Zlcl9zdHJhaW4sIGhvdmVyX2FidW5kLCBob3Zlcl90YXgpLAogICAgICAgICAgICAgICAgbnJvdyA9IG5yb3coaG92ZXJfdGF4KSwgbmNvbCA9IG5jb2woaG92ZXJfdGF4KSkKCiMgUGVyZm9ybSBsb2cxMCB0cmFuc2Zvcm1hdGlvbiBvbiByZWxhdGl2ZSBhYnVuZGFuY2VzCmRhdGEgPC0gbG9nKHhbLCAxOm5zYW1wXSwgYmFzZSA9IDEwKSAlPiUgYXMubWF0cml4CmRhdGFbc2FwcGx5KGRhdGEsIGlzLmluZmluaXRlKV0gPC0gTkEKY29sbmFtZXMoZGF0YSkgPC0gIkVCXzI2MSAoQ2FwU2NhbikiCmBgYAo8YnI+PGJyPgoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuMiBIaWdoLXJlc29sdXRpb24gc25hcHNob3Qgb2YgY29tbXVuaXR5IGNvbXBvc2l0aW9uCjwvZGl2PgpGaWd1cmUgMiBpcyBhbiBpbnRlcmFjdGl2ZSBmaWd1cmUgc2hvd2luZyB0aGUgbWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBhdCBoaWdoZXIgdGF4b25vbm9taWMgcmVzb2x1dGlvbi4gSGVyZSwgZWFjaCByb3cgY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUgbWljcm9iZS4KPGJyPjxicj4KWW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgZmlndXJlIGJ5OgoKKiBIb3ZlcmluZyB0aGUgY3Vyc29yIG92ZXIgYSBjZWxsIHRvIHNlZSB0aGF0IG1pY3JvYmUncyBnZW51cyBhbmQgc3BlY2llcyAoYW5kIHN0cmFpbiB3aGVuIGF2YWlsYWJsZSksIHJlbGF0aXZlIGFidW5kYW5jZSwgYW5kIGZ1bGwgdGF4b25vbWljIGNsYXNzaWZpY2F0aW9uCiogQ2xpY2tpbmcgYW5kIGRyYWdnaW5nIHRoZSBjdXJzb3Igb3ZlciBhIHBvcnRpb24gb2YgdGhlIGZpZ3VyZSB0byB6b29tCgo8YnI+PGJyPgpgYGB7ciwgb3V0LmhlaWdodCA9ICI3NTBweCIsIGVjaG8gPSBGQUxTRX0KIyBTZXQgc2FtcGxlIG5hbWVzCiNjb2xuYW1lcyhkYXRhKSA8LSBjKCJFQl8yNjkgKHNhbGl2YSkiLCAiRUJfMjcwIChDYXBTY2FuKSIsICJFQl8yNzEgKENhcFNjYW4pIiwKIyAgICAgICAgICAgICAgICAgICAgIkVCXzI3MiAoQ2FwU2NhbikiLCAiRUJfMjczIChDYXBTY2FuKSIsICJFQl8yNzQgKHN0b29sKSIpCgojIFByZXBhcmUgdGF4b25vbXkgcm93IHNpZGUKcm93X3NpZGUgPC0geCAlPiUgc2VsZWN0KFBoeWx1bSkKcm93X3NpZGUkUGh5bHVtW3Jvd19zaWRlJFBoeWx1bSAlIWluJSBtYWpvcl9waHldIDwtICJPdGhlciBwaHlsYSIKcm93X3NpZGUkUGh5bHVtIDwtIGZhY3Rvcihyb3dfc2lkZSRQaHlsdW0sIGxldmVscyA9IGMoIk90aGVyIHBoeWxhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIpKQoKIyBQbG90CnBIZWF0IDwtIGhlYXRtYXBseShkYXRhLAogICAgICAgICAgICAgICAgICAgUm93diA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgQ29sdiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgY29sb3JzID0gdmlyaWRpczo6dmlyaWRpcygxMCksCiAgICAgICAgICAgICAgICAgICByb3dfc2lkZV9jb2xvcnMgPSByb3dfc2lkZSwKICAgICAgICAgICAgICAgICAgIHJvd19zaWRlX3BhbGV0dGUgPSBjKCJBY3Rpbm9iYWN0ZXJpYSIgPSAiI0ZGQjcyNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIgPSAiIzY0QzYyQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIgPSAiIzA3MkFDOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiID0gIiNFOTNCNEYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIHBoeWxhIiA9ICIjODMyQ0ZGIiksCiAgICAgICAgICAgICAgICAgICBzdWJwbG90X21hcmdpbiA9IDAuMDEsCiAgICAgICAgICAgICAgICAgICBzdWJwbG90X3dpZHRocyA9IGMoMC45LCAwLjA3KSwKICAgICAgICAgICAgICAgICAgIHNpZGVfY29sb3JfY29sb3JiYXJfbGVuID0gMC4zLAogICAgICAgICAgICAgICAgICAgcGxvdF9tZXRob2QgPSAicGxvdGx5IiwKICAgICAgICAgICAgICAgICAgIGN1c3RvbV9ob3ZlcnRleHQgPSBob3ZlcnRleHQsCiAgICAgICAgICAgICAgICAgICB4bGFiID0gIjxiPlNhbXBsZTwvYj4iLAogICAgICAgICAgICAgICAgICAgeWxhYiA9ICI8Yj5NaWNyb2JlPC9iPiIsCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl94cG9zID0gMS4wMTksCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl95cG9zID0gMC41LAogICAgICAgICAgICAgICAgICAgY29sb3JiYXJfbGVuID0gMC4zKSAlPiUKICBsYXlvdXQoeGF4aXMgPSBsaXN0KHNob3dncmlkID0gRkFMU0UpLAogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIHNob3d0aWNrbGFiZWxzID0gRkFMU0UpLAogICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAiQXJpYWwiKSkgJT4lCiAgY29sb3JiYXIodGl0bGUgPSAiUmVsYXRpdmUgYWJ1bmRhbmNlIiwKICAgICAgICAgICB0aWNrdmFscyA9IGMoLTEsIDAsIDEpLAogICAgICAgICAgIHRpY2t0ZXh0ID0gYygiMC4xJSIsICIxJSIsICIxMCUiKSkKCiMgRm9ybWF0IHJvdyBzaWRlCnBIZWF0JHgkbGF5b3V0JHhheGlzMiR0aWNrdGV4dCA8LSAiUGh5bHVtIgpwSGVhdCR4JGxheW91dCR4YXhpcyRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBIZWF0JHgkbGF5b3V0JHhheGlzMiRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBIZWF0JHgkbGF5b3V0JHlheGlzJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkbGVnZW5kJHlhbmNob3IgPC0gImJvdHRvbSIKcEhlYXQKYGBgCioqRmlndXJlIDI6KiogSGVhdCBtYXAgc2hvd2luZyByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgdW5pcXVlIG1pY3JvYmVzIChOID0gMTAzIHRvdGFsIGlkZW50aWZpZWQpLiBFYWNoIHJvdyBjb3JyZXNwb25kcyB0byBhIHVuaXF1ZSBtaWNyb2JlLiBOb3RlIHRoZSByZWxhdGl2ZSBhYnVuZGFuY2UgY29sb3JzY2FsZSBpcyBpbiBsb2cgdW5pdHMuCgo8YnI+PGJyPgoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuMyBOb3RhYmxlIG1pY3JvYmVzIGRldGVjdGVkCjwvZGl2PgoKKiAqRmFlY2FsaWJhY3Rlcml1bSBwcmF1c25pdHppaSo6CiAgKiBQcmV2aW91c2x5IHNob3duIHRvIHByb2R1Y2UgYSBzbWFsbCBwcm90ZWluIHRoYXQgYWxsZXZpYXRlcyBndXQgaW5mbGFtbWF0aW9uIGluIG1vdXNlIG1vZGVscyAoUXXDqXZyYWluICpldCBhbCouLCAyMDE3KQogICogRm91bmQgYXQgfjElIHJlbGF0aXZlIGFidW5kYW5jZSBpbiBkaXN0YWwgQ2FwU2NhbiBzYW1wbGUKPGJyPjxicj4KCiogKlJ1bWlub2NvY2N1cyBicm9taWkqOgogICogRmFjaWxpdGF0ZXMgdGhlIGJyZWFrZG93biBvZiBkaWV0YXJ5IHN0YXJjaGVzIHRoYXQgcmVzaXN0IGRpZ2VzdGlvbiAoWmUgKmV0IGFsKi4sIDIwMTIpCiAgKiBGb3VuZCBhdCB+MyUgcmVsYXRpdmUgYWJ1bmRhbmNlIGluIGFuYWx5emVkIENhcFNjYW4gc2FtcGxlCiAgCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS40IFJlZmVyZW5jZXMKPC9kaXY+CgpRdcOpdnJhaW4sIEUuLCBNYXViZXJ0LCBNLkEuLCBNaWNob24sIEMuLCBDaGFpbiwgRi4sIE1hcnF1YW50LCBSLiwgVGFpbGhhZGVzLCBKLiwgKmV0IGFsKi4gKDIwMTcpIElkZW50aWZpY2F0aW9uIG9mIGFuIGFudGktaW5mbGFtbWF0b3J5IHByb3RlaW4gZnJvbSAqRmFlY2FsaWJhY3Rlcml1bSBwcmF1c25pdHppaSosIGEgY29tbWVuc2FsIGJhY3Rlcml1bSBkZWZpY2llbnQgaW4gQ3JvaG7igJlzIGRpc2Vhc2UuICpHdXQqIDY1OiA0MTXigJM0MjUuCjxicj48YnI+ClplLCBYLiwgRHVuY2FuLCBTLkguLCBMb3VpcywgUC4sIGFuZCBGbGludCwgSC5KLiAoMjAxMikgKlJ1bWlub2NvY2N1cyBicm9taWkqIGlzIGEga2V5c3RvbmUgc3BlY2llcyBmb3IgdGhlIGRlZ3JhZGF0aW9uIG9mIHJlc2lzdGFudCBzdGFyY2ggaW4gdGhlIGh1bWFuIGNvbG9uLiAqSVNNRSBKKiA2OiAxNTM14oCTMTU0My4=